# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Content.V21.Model.Recommendation do
  @moduledoc """
  Recommendations are suggested ways to improve your merchant account's performance. For example, to engage with a feature, or start using a new Google product.

  ## Attributes

  *   `additionalCallToAction` (*type:* `list(GoogleApi.Content.V21.Model.RecommendationCallToAction.t)`, *default:* `nil`) - Output only. CTAs of this recommendation. Repeated.
  *   `additionalDescriptions` (*type:* `list(GoogleApi.Content.V21.Model.RecommendationDescription.t)`, *default:* `nil`) - Output only. List of additional localized descriptions for a recommendation. Localication uses the `languageCode` field in `GenerateRecommendations` requests. Not all description types are guaranteed to be present and we recommend to rely on default description.
  *   `creative` (*type:* `list(GoogleApi.Content.V21.Model.RecommendationCreative.t)`, *default:* `nil`) - Output only. Any creatives attached to the recommendation. Repeated.
  *   `defaultCallToAction` (*type:* `GoogleApi.Content.V21.Model.RecommendationCallToAction.t`, *default:* `nil`) - Optional. Default CTA of the recommendation.
  *   `defaultDescription` (*type:* `String.t`, *default:* `nil`) - Optional. Localized recommendation description. The localization the {@link `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
  *   `numericalImpact` (*type:* `integer()`, *default:* `nil`) - Optional. A numerical score of the impact from the recommendation's description. For example, a recommendation might suggest an upward trend in sales for a certain product. Higher number means larger impact.
  *   `paid` (*type:* `boolean()`, *default:* `nil`) - Optional. Indicates whether a user needs to pay when they complete the user journey suggested by the recommendation.
  *   `recommendationName` (*type:* `String.t`, *default:* `nil`) - Optional. Localized recommendation name. The localization uses the {@link `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
  *   `subType` (*type:* `String.t`, *default:* `nil`) - Optional. Subtype of the recommendations. Only applicable when multiple recommendations can be generated per type, and is used as an identifier of recommendation under the same recommendation type.
  *   `title` (*type:* `String.t`, *default:* `nil`) - Optional. Localized Recommendation Title. Localization uses the {@link `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
  *   `type` (*type:* `String.t`, *default:* `nil`) - Output only. Type of the recommendation. List of currently available recommendation types: - OPPORTUNITY_CREATE_NEW_COLLECTION - OPPORTUNITY_CREATE_EMAIL_CAMPAIGN
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :additionalCallToAction =>
            list(GoogleApi.Content.V21.Model.RecommendationCallToAction.t()) | nil,
          :additionalDescriptions =>
            list(GoogleApi.Content.V21.Model.RecommendationDescription.t()) | nil,
          :creative => list(GoogleApi.Content.V21.Model.RecommendationCreative.t()) | nil,
          :defaultCallToAction =>
            GoogleApi.Content.V21.Model.RecommendationCallToAction.t() | nil,
          :defaultDescription => String.t() | nil,
          :numericalImpact => integer() | nil,
          :paid => boolean() | nil,
          :recommendationName => String.t() | nil,
          :subType => String.t() | nil,
          :title => String.t() | nil,
          :type => String.t() | nil
        }

  field(:additionalCallToAction,
    as: GoogleApi.Content.V21.Model.RecommendationCallToAction,
    type: :list
  )

  field(:additionalDescriptions,
    as: GoogleApi.Content.V21.Model.RecommendationDescription,
    type: :list
  )

  field(:creative, as: GoogleApi.Content.V21.Model.RecommendationCreative, type: :list)
  field(:defaultCallToAction, as: GoogleApi.Content.V21.Model.RecommendationCallToAction)
  field(:defaultDescription)
  field(:numericalImpact)
  field(:paid)
  field(:recommendationName)
  field(:subType)
  field(:title)
  field(:type)
end

defimpl Poison.Decoder, for: GoogleApi.Content.V21.Model.Recommendation do
  def decode(value, options) do
    GoogleApi.Content.V21.Model.Recommendation.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Content.V21.Model.Recommendation do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
